package com.github.cakin.shiro.chapter23.service;

import com.github.cakin.shiro.chapter23.entity.Authorization;

import java.util.List;
import java.util.Set;

/**
 * @className: AuthorizationService
 * @description: 授权服务接口
 * @date: 2020/6/1
 * @author: cakin
 */
public interface AuthorizationService {
    /**
     * 功能描述：创建一条授权记录
     *
     * @param authorization 授权信息
     * @return Authorization 返回创建的授权信息
     * @author cakin
     * @date 2020/6/1
     */
    Authorization createAuthorization( Authorization authorization );

    /**
     * 功能描述：更新一条授权记录
     *
     * @param authorization 授权信息
     * @return Authorization 返回更新的授权信息
     * @author cakin
     * @date 2020/6/1
     */
    Authorization updateAuthorization( Authorization authorization );

    /**
     * 功能描述：删除一条授权记录
     *
     * @param authorizationId 授权记录id
     * @author cakin
     * @date 2020/6/1
     */
    void deleteAuthorization( Long authorizationId );

    /**
     * 功能描述：根据id找到对应的授权记录
     *
     * @param authorizationId 授权记录的id
     * @return Authorization 返回更新的授权信息
     * @author cakin
     * @date 2020/6/1
     */
    Authorization findOne( Long authorizationId );

    /**
     * 功能描述：查找所有的授权记录
     *
     * @return List<Authorization> 授权列表
     * @author cakin
     * @date 2020/6/1
     */
    List<Authorization> findAll();

    /**
     * 根据AppKey和用户名查找其角色集
     *
     * @param username 用户名
     * @param appKey   app键
     * @return Set<String> 角色集
     */
    Set<String> findRoles( String appKey, String username );

    /**
     * 根据AppKey和用户名查找权限字符串集
     *
     * @param username 用户名
     * @param appKey   app键
     * @return Set<String> 权限集
     */
    Set<String> findPermissions( String appKey, String username );
}
